1 //+-----------------------------------------------------------------------
3 // Copyright (c) Microsoft Corporation. All rights reserved.
6 // Custom Watson reporting for problems encountered during DocObject activation
8 // All problems detected (at least initially) stem from ACCESS DENIED errors when accessing
9 // certain registry keys or file locations. We get these while normal applications don't because
10 // our process runs with a restricted token: in particular, the Local Administrators SID is
11 // removed. Normally, registry keys and file locations associated with a user's profile give
12 // that user's account explicit Full Access permission. The same permission is given to the
13 // Administrators group. On some Windows XP computers, however, the ACL for the user's account
14 // is lost or it shows some unresolved SID--probably result of profile/account migration and/or
15 // OS upgrade. When a normal process runs, the user gets access via the Administrators group
18 // The purpose of the Watson reporting is to lead users of affected computers to a KB article
19 // and possibly a patch utility to resolve the problem. Otherwise they are left with just a
20 // blank browser window. Or, in some cases, infinite relaunching of PresHost and IE happens.
23 // 2007/07/20 [....] Created
24 // 2007/09/20 [....] Ported Windows->DevDiv. See SourcesHistory.txt.
26 //------------------------------------------------------------------------
30 #include "..\shared\WatsonReportingShared.hxx"
32 // Our 'generic' event registered with Watson:
33 // http://watson/Madlib.aspx?MadlibId=GenericEventTypeParams&EventTypeName=WPFHostActivationProblem
34 #define ACTIVATION_PROBLEM_WATSON_EVENT L"WPFHostActivationProblem"
36 // Values for P4 in the manifest report
37 namespace ActivationProblemIds
40 HKCUClassesAccessDenied
= L
"HKCU Classes Access Denied",
41 AppDataFolderAccessDenied
= L
"AppData Folder Access Denied",
42 IPersistMonikerMarshalingFailed
= L
"IPersistMoniker Marshaling";
45 void TriggerWatson(LPCWSTR problemId
);
47 HRESULT
CheckRegistryAccess();
48 HRESULT
CheckAppDataFolderAccess();